import tkinter as tk
from tkinter import ttk
from tkinter import simpledialog
from tkinter import filedialog, messagebox
import csv
from datetime import datetime
root = tk.Tk()

def load_data(file_path):
    # 使用with语句打开文件，确保文件在操作完成后正确关闭
    with open(file_path, newline='') as file:
        # 创建一个csv阅读器对象
        # csv.reader(file) 用于读取CSV文件
        reader = csv.reader(file)
        # 遍历CSV文件的每一行
        for row in reader:
            # 将当前行插入到树形控件中
            # tree是一个假设存在的树形控件对象，'insert'方法用于向树形控件添加节点
            # 第一个参数''表示插入到根节点下，'end'表示插入到当前节点的最后一个子节点位置
            # 'values=row'表示插入的节点值为当前行数据
            tree.insert('', 'end', values=row)

def save_data():
    # 弹出保存对话框，让用户选择保存文件的位置和文件名
    file_path = filedialog.asksaveasfilename(defaultextension=".csv")
    # 如果用户没有选择文件路径，则返回
    if not file_path:
        return

    # 使用with语句打开文件，确保文件正确关闭
    with open(file_path, 'w', newline='') as file:
        # 创建一个csv写入器
        writer = csv.writer(file)
        # 遍历树形控件的所有子项
        for child_id in tree.get_children():
            # 获取当前子项的值
            row = tree.item(child_id)['values']
            # 将值写入文件
            writer.writerow(row)

    # 弹出消息框，提示用户数据保存成功
    messagebox.showinfo("Info", "Data saved successfully")


    # 设置窗口标题
    # 这里似乎缺少了具体的实现代码，只是注释提到了“设置窗口标题”，但没有实际的代码实现
root.title("To-Do_List")
    # 创建 Treeview 控件，并指定列名
tree = ttk.Treeview(root, columns=("Priority", "Content", "Time"), show="headings")
    
    # 设置每列的标题
tree.heading("Priority", text="Priority")
tree.heading("Content", text="Content")
tree.heading("Time", text="Time")
    # 设置每列的宽度
tree.column("Priority", width=50)
tree.column("Content", width=100)
tree.column("Time", width=100)
    # 添加滚动条(高级功能，抄一抄即可)
vsb = ttk.Scrollbar(root, orient="vertical", command=tree.yview)
hsb = ttk.Scrollbar(root, orient="horizontal", command=tree.xview)
tree.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)
    # 将滚动条放置到窗口中
vsb.pack(side='right', fill='y')
hsb.pack(side='bottom', fill='x')

    # 将 Treeview 放置到主窗口中
tree.pack(expand=True, fill=tk.BOTH)




def add_new_data():
    # 弹出对话框提示用户输入数据
    user_input = simpledialog.askstring("Input", "Please enter some data:")
    # 将用户输入的数据插入到树形控件中
    # "" 表示插入到树的根节点下，"end" 表示插入到最后一个子节点之后
    tree.insert("", "end", values=user_input)
    # 将用户输入的数据插入到树形控件中
    # "" 表示插入到树的根节点下，"end" 表示插入到最后一个子节点之后
    tree.insert("", "end", values=user_input)


# 添加按钮以加载数据
load_button = tk.Button(root, text="Load Data", command=lambda: load_data(filedialog.askopenfilename()))
load_button.pack(side=tk.LEFT, padx=5, pady=5)

# 添加按钮以保存数据
save_button = tk.Button(root, text="Save Data", command=save_data)
save_button.pack(side=tk.RIGHT, padx=5, pady=5)

# 添加按钮以添加新数据
add_button = tk.Button(root, text="Add New Data", command=add_new_data)
add_button.pack(pady=10)
def button1_touch():
    # 遍历获取所有的索引（区分为一个被选中的或者是没有被选中）
    selected_indices = tree.selection()

    # 如果存在选中的索引
    if selected_indices:
        # 反向遍历选中的索引，以便从最后一个选中的项开始删除
        for index in reversed(selected_indices):  # 反向删除
            # 从树形视图中删除对应的项
            tree.delete(index)  # 除去这个东西
remove_button=tk.Button(root,text="Remove Data",command=button1_touch)
remove_button.pack()

def on_select(event):
    # 获取选中的行
    selected_item = tree.selection()
    if selected_item:  # 确保有选中的行
        item_id = selected_item[0]  # 通常只会选中一行，所以取第一个
        # 获取选中行的所有数据
        item_data = tree.item(item_id)
        # 提取特定列的数据
        priority = item_data['values'][0]
        event = item_data['values'][1]
        time = item_data['values'][2]
        event_time = datetime.strptime(time, '%H:%M')
        
        # 获取当前时间
        current_time = datetime.now()
        if event_time > current_time:
            print(f"事件 {item_data['values'][1]} 尚未发生。")
        elif event_time < current_time:
            print(f"事件 {item_data['values'][1]} 已经发生。")
        else:
            print(f"事件 {item_data['values'][1]} 正在发生。")

# 绑定选择事件
tree.bind('<<TreeviewSelect>>', on_select)

root.mainloop()